package leetcode.alg.demo;

/**
 * 输入一个矩阵，按照从外向里以顺时针的顺序依次打印出每一个数字。
 *
 * 示例 1：
 * 输入：matrix = [[1,2,3],[4,5,6],[7,8,9]]
 * 输出：[1,2,3,6,9,8,7,4,5]
 *
 * 示例 2：
 * 输入：matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
 * 输出：[1,2,3,4,8,12,11,10,9,5,6,7]
 *
 * 限制：
 * 0 <= matrix.length <= 100
 * 0 <= matrix[i].length <= 100
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Print_matrix_clockwise {
    public static void main(String[] args){
        int[][] matrix = {{1,2,3},{4,5,6},{7,8,9}};
        int[] result = spiralOrder(matrix);
        System.out.println(result);
    }

    public static int[] spiralOrder(int[][] matrix) {
        if(matrix.length == 0){
            return new int[0];
        }
        int left = 0;
        int right = matrix[0].length - 1;
        int top = 0;
        int bottom = matrix.length - 1;
        int index = 0;
        int[] result = new int[(right + 1) * (bottom + 1)];
        while (true){
            for(int i = left; i <= right; i ++){    //left -> right
                result[index ++] = matrix[top][i];
            }
            if(++top > bottom){
                break;
            }
            for(int i = top; i <= bottom; i ++){    //top -> bottom
                result[index ++] = matrix[i][right];
            }
            if(left > --right){
                break;
            }
            for(int i = right; i >= left; i --){    //right -> left
                result[index ++] = matrix[bottom][i];
            }
            if(top > --bottom){
                break;
            }
            for(int i = bottom; i >= top; i--){
                result[index ++] = matrix[i][left];
            }
            if(++left > right){
                break;
            }
        }
        return result;
    }
}
